FastAPI তে Pydantic Model ব্যবহার করে Request Body তৈরি করা খুবই সহজ এবং কার্যকর। Pydantic হলো একটি Python লাইব্রেরি যা ডাটা ভ্যালিডেশন এবং টাইপ এনোটেশনকে সহজ ও শক্তিশালী করে তোলে। FastAPI এই লাইব্রেরি ব্যবহার করে ইনপুট ডাটার টাইপ যাচাই, ডাটা ক্লিনিং এবং ভ্যালিডেশন স্বয়ংক্রিয়ভাবে সম্পাদন করে।
এখানে, আমরা দেখব কিভাবে Pydantic Model ব্যবহার করে FastAPI-তে Request Body তৈরি করা যায় এবং ইনপুট ডাটা ভ্যালিডেশন নিশ্চিত করা যায়।
Step 1: Pydantic Model তৈরি করা
Pydantic মডেল তৈরি করার জন্য BaseModel ক্লাস ইনহেরিট করা হয়। এতে আপনি ডাটার টাইপ, ডিফল্ট মান, এবং অন্যান্য ভ্যালিডেশন রুলস নির্ধারণ করতে পারেন।
উদাহরণ: Pydantic Model
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
এখানে:
name: একটি স্ট্রিং টাইপ ফিল্ড যা বাধ্যতামূলক (Required)।description: একটি ঐচ্ছিক স্ট্রিং (Optional) ফিল্ড।price: একটি ফ্লোট টাইপ ফিল্ড যা বাধ্যতামূলক।tax: একটি ঐচ্ছিক ফ্লোট টাইপ ফিল্ড।
Step 2: FastAPI-তে Request Body তৈরি করা
এখন আমরা Item মডেল ব্যবহার করে একটি API এন্ডপয়েন্ট তৈরি করব যা একটি POST রিকোয়েস্ট গ্রহণ করবে।
উদাহরণ: Request Body তৈরি
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# Pydantic Model
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.post("/items/")
def create_item(item: Item):
return {"item_name": item.name, "item_price": item.price, "item_tax": item.tax}
এখানে, /items/ এন্ডপয়েন্ট একটি POST রিকোয়েস্ট গ্রহণ করবে যেখানে Item মডেলটি Request Body হিসেবে পাঠানো হবে।
রিকোয়েস্ট উদাহরণ (JSON Body):
POST /items/
Body:
{
"name": "Laptop",
"description": "A high-performance laptop",
"price": 1500.00,
"tax": 120.00
}
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00,
"item_tax": 120.00
}
এখানে, Request Body JSON আকারে পাঠানো হয়েছে এবং FastAPI এই ডাটা Item মডেল দিয়ে স্বয়ংক্রিয়ভাবে ভ্যালিডেট করেছে।
Step 3: Pydantic Model-এ Validation (ভ্যালিডেশন)
Pydantic মডেল ব্যবহার করে বিভিন্ন ধরনের ভ্যালিডেশন করা যায়। FastAPI তে আপনি Pydantic মডেলের Field কনস্ট্রেইন্ট (constraints) ব্যবহার করে ইনপুট ডাটার সীমাবদ্ধতা নির্ধারণ করতে পারেন, যেমন min_length, max_length, gt, lt, regex ইত্যাদি।
উদাহরণ: Validation কনস্ট্রেইন্ট সহ Pydantic Model
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str = Field(..., min_length=3)
description: str | None = Field(None, max_length=300)
price: float = Field(..., gt=0)
tax: float | None = None
এখানে:
name: কমপক্ষে ৩টি অক্ষর থাকতে হবে।description: সর্বাধিক ৩০০টি অক্ষর থাকতে হবে।price: ০ এর বেশি হওয়া উচিত।
রিকোয়েস্ট উদাহরণ:
{
"name": "Laptop",
"description": "A high-end laptop with excellent performance",
"price": 1500.00
}
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00
}
ভুল ইনপুট উদাহরণ (যেমন: price <= 0):
{
"name": "Laptop",
"description": "A high-end laptop",
"price": -10.00
}
রেসপন্স (ত্রুটি):
{
"detail": [
{
"loc": ["body", "price"],
"msg": "ensure this value is greater than 0",
"type": "value_error.number.gt"
}
]
}
Step 4: Optional Fields এবং Default Values
Pydantic মডেলগুলিতে Optional Fields এবং Default Values ব্যবহারের মাধ্যমে আপনি ঐচ্ছিক ডাটা এবং ডিফল্ট মান নির্ধারণ করতে পারেন।
উদাহরণ: Optional Fields এবং Default Values সহ Pydantic Model
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = "No description provided"
price: float
tax: float | None = 0.0 # Default value
এখানে, description একটি ঐচ্ছিক ফিল্ড, যার ডিফল্ট মান "No description provided" এবং tax এর ডিফল্ট মান 0.0।
রিকোয়েস্ট উদাহরণ:
{
"name": "Laptop",
"price": 1500.00
}
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00,
"item_tax": 0.0,
"description": "No description provided"
}
Step 5: Complex Data Structures (Nested Models)
FastAPI তে Pydantic মডেল ব্যবহার করে আপনি nested models তৈরি করতে পারেন, যা আরও জটিল ডাটা স্ট্রাকচারকে সমর্থন করে।
উদাহরণ: Nested Models
from pydantic import BaseModel
from typing import List
class Manufacturer(BaseModel):
name: str
country: str
class Item(BaseModel):
name: str
price: float
manufacturer: Manufacturer
@app.post("/items/")
def create_item(item: Item):
return {"item_name": item.name, "item_price": item.price, "manufacturer": item.manufacturer}
এখানে, Item মডেলের মধ্যে Manufacturer মডেলকে nested হিসেবে অন্তর্ভুক্ত করা হয়েছে।
রিকোয়েস্ট উদাহরণ:
{
"name": "Laptop",
"price": 1500.00,
"manufacturer": {
"name": "TechCorp",
"country": "USA"
}
}
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00,
"manufacturer": {
"name": "TechCorp",
"country": "USA"
}
}
FastAPI তে Pydantic Model ব্যবহার করে Request Body তৈরি করা সহজ এবং অত্যন্ত কার্যকর। এটি ইনপুট ডাটার টাইপ যাচাই, ভ্যালিডেশন এবং ডিফল্ট মান সেট করার কাজগুলি স্বয়ংক্রিয়ভাবে করে এবং একটি পরিষ্কার ও মডুলার কোডবেস তৈরি করতে সাহায্য করে। Pydantic মডেল ব্যবহারের মাধ্যমে আপনি বিভিন্ন ধরনের ভ্যালিডেশন, ঐচ্ছিক ফিল্ড এবং জটিল ডাটা স্ট্রাকচার তৈরি করতে পারেন।
Read more